El siguiente bloque if parece realmente ineficiente. Me imagino que hay una mejor manera de hacer esto.
Esto se utilizará para establecer parámetros en una biblioteca de gráficos. por ejemplo, posición de la cámara, posición de los objetos y otros.
Además, una solución genérica es bienvenida.
const queryString = window.location.search; const urlParameter = new URLSearchParams(queryString); //this code is what my question is about V if (urlParameter.has("a")) { a = parseInt(urlParameter.get("a")); } if (urlParameter.has("b")) { b = parseInt(urlParameter.get("b")); } if (urlParameter.has("c")) { c = parseInt(urlParameter.get("c")); } if (urlParameter.has("d")) { d = parseInt(urlParameter.get("d")); } //^Nota: soy bastante inexperto con JavaScript y lo uso principalmente para proyectos de pasatiempos.
En lugar de almacenarlos como variables individuales, probablemente sea mejor almacenarlos en un objeto o instancia de mapa. Esto permite un enfoque más dinámico al establecer/obtener los valores.
const allowedParameters = ["a", "b", "c", "d"]; const values = {}; for (const paramName of allowedParameters) { if (urlParameter.has(paramName)) { values[paramName] = parseInt(urlParameter.get(paramName)); } } Luego puede acceder a los valores a través values.a (o values["a"] ), values.b , etc.
Si desea almacenarlos como variables individuales, puede usar la asignación de desestructuración, esto supone que las variables no están definidas de antemano.
const [a, b, c, d] = ["a", "b", "c", "d"].map((paramName) => { if (urlParameter.has(paramName)) { return parseInt(urlParameter.get(paramName)); } }); Lo anterior establecerá a , b , c y d independientemente de su presencia en urlParameter . Si no están presentes, se establecerán en undefined , porque la devolución de llamada map() devuelve undefined si no está presente (no tiene valor de retorno).
Lo que significa que esta solución no funcionará si a , b , c y d ya están definidos, y solo desea redefinirlos si están presentes.
Esto se puede resolver con la solución a continuación, pero esto solo funcionará al redefinir variables, no si las está inicializando por primera vez.
[a, b, c, d] = Object.entries({ a, b, c, d }).map((paramName, oldValue) => { if (urlParameter.has(paramName)) { return parseInt(urlParameter.get(paramName)); } else { return oldValue; } });Puede usar una matriz con los nombres de los parámetros de entrada y repetirla.
Pero como no puede asignar nombres de variables dinámicas en JavaScript, deberá cambiar ligeramente su salida para usar un objeto:
const allowedParameters = ['a', 'b', 'c', 'd']; const parsedParameters = {}; allowedParameters.forEach((key)=> { if (urlParameter.has(key)) { parsedParameters[key] = parseInt(urlParameter.get(key)); } }); // To use the values just access each key in the parsedParameters object: console.log(parsedParameters.a);